在前一些日子的鐵人賽中,我曾經寫過關於Docker in Azure的文章,今天我們接續昨天的Github Actions介紹文章,我們來試著來建立一個CI,自動化將寫好的Express包在Dockerfile中並自動化推上Azure。
相關的程式碼可以查看: Github
其實撰寫Github Actions workflow的步驟不外乎就是,1. 找到自己的需求 2.去Github Marketplace 找到你的Action需求 3. 改寫。我們的需求是push Express到Azure並自動產生一個應用。
打開Github並搜尋Azure,找到一個你覺得不錯的Actions
Optional 如果你沒有Azure帳號、Azure ReourceGroup、Azure arc帳號,可以先參考Day 17,文章會告訴你怎麼建立。az login
、az acr login --name <resourceGroup>
做登入
打開你的Azure,整體的azure是會如同這張圖,ManagementGroup分配Subsription並以此管理可以使用的資源。
訂用用戶->訂用用戶ID,取得你的subscript_id。訂用用戶->資源群組->取得資源群組名稱
在Azure CLI建立新的APP:
az ad sp create-for-rbac --name "myExpress" --role contributor --scopes /subscriptions/{subscription-id}/resourceGroups/{resource-group} --sdk-auth
如上獲得了AZURE_CREDENTIALS,把上面顯示的JSON加到Github Repository的變數之中。settings -> secrets -> New repository secret
。取名為AZURE_CREDENTIALS
,並把JSON添加到Value中。
順便把REGISTRY_USERNAME
與REGISTRY_PASSWORD
加入github secrets中。打開你的資源群組 -> 你的資源群組 -> ACR -> 存取金鑰
,使用者名稱與password分別就是你的REGISTRY_USERNAME
與REGISTRY_PASSWORD
。
回到workflows中,我們可以先來測試登入:
name: Express to Azure
on:
push:
branches:
- "master"
pull_request:
branches: ["master"]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- run: |
az account show
顯示成功登入即可:
接著就是部屬了,參考Day 17就會知道你的login-server與resource-group。我的login-server是luforresourcegroup.azurecr.io
、resource-group是luforresourcegroup
,workflows寫法如下:
# .github/workflows/main.yml
name: Express to Azure
on:
push:
branches:
- "master"
pull_request:
branches: ["master"]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
# checkout the repo
- name: 'Checkout GitHub Action'
uses: actions/checkout@master
- name: 'Login via Azure CLI'
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- uses: azure/docker-login@v1
with:
login-server: luforresourcegroup.azurecr.io
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- run: |
docker build . -t luforresourcegroup.azurecr.io/mynodeapp:${{ github.sha }}
docker push luforresourcegroup.azurecr.io/mynodeapp:${{ github.sha }}
如此一來就能把image自動化推上Azure了,參考Day 17來建立container,並完成API。